Add Lovable Gold-partner page#1028
Conversation
Build out /partners/lovable as a dedicated, SEO/conversion-focused partner page, mirroring the structure of the existing Railway page (partners.railway.tsx) with Lovable's own product data. - Reuses site components (Card, Button, Collapsible, CodeBlock, PartnerImage), Tailwind conventions, dark mode, and analytics tracking (partner_viewed / partner_clicked). - Framing: Lovable generates TanStack Start apps from a prompt and ships them to Lovable Cloud (deploy/hosting angle). - Real product data: 8M+ builders, 25M+ apps, credit-based pricing (Free $0 / Pro $25 / Business $50 / Enterprise custom). - Social-proof section uses verifiable aggregate stats rather than attributed testimonials. - SEO: seo() meta (title, description, keywords, OG, Twitter) plus JSON-LD WebPage (partner) + FAQPage (6 Q&As) for rich results and AI search agents. - All outbound links carry ?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page. A static /partners/lovable route auto-overrides the dynamic $partner fallback; routeTree.gen.ts regenerated accordingly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThis PR adds a new TanStack Router route at ChangesLovable Partner Route
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant LovablePartnerPage
participant Analytics
participant PartnerData
User->>LovablePartnerPage: navigate to /partners/lovable
LovablePartnerPage->>PartnerData: getPartnerById('lovable')
PartnerData-->>LovablePartnerPage: partner record
LovablePartnerPage->>Analytics: track partner_viewed
User->>LovablePartnerPage: click outbound Lovable link
LovablePartnerPage->>Analytics: trackLovableClick (partner_clicked)
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
tanstack-com | 31b3728 | Commit Preview URL Branch Preview URL |
Jul 03 2026, 04:56 PM |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/routes/partners.lovable.tsx (1)
389-405: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRepeated CTA button className/handler could be extracted into a shared component.
The
bg-gray-950 text-white border-gray-950 hover:bg-gray-800 dark:bg-white dark:text-gray-950 dark:border-white dark:hover:bg-gray-200class string plustarget="_blank" rel="noreferrer" onClick={trackLovableClick}combo is repeated verbatim on every primary CTA button across the page (e.g. lines 497-507, 620-630, 667-677, 742-753). Extracting a smallLovablePrimaryCTAwrapper would reduce duplication and centralize future styling/tracking changes.♻️ Sketch
+function LovablePrimaryCTA({ + href, + onClick = trackLovableClick, + children, + size, +}: { href: string; onClick?: () => void; children: React.ReactNode; size?: 'lg' }) { + return ( + <Button + as="a" + href={href} + target="_blank" + rel="noreferrer" + onClick={onClick} + size={size} + className="bg-gray-950 text-white border-gray-950 hover:bg-gray-800 dark:bg-white dark:text-gray-950 dark:border-white dark:hover:bg-gray-200" + > + {children} + </Button> + ) +}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/routes/partners.lovable.tsx` around lines 389 - 405, The repeated primary CTA button styling and tracking setup should be centralized to avoid duplication across the page. Extract the shared `Button` configuration from the `partners.lovable.tsx` CTAs into a small reusable `LovablePrimaryCTA` component (or equivalent wrapper) that encapsulates the `LOVABLE_HREF`, `target="_blank"`, `rel="noreferrer"`, `onClick={trackLovableClick}`, and shared className, then replace each repeated usage with that component while keeping the label/icon flexible.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/routes/partners.lovable.tsx`:
- Around line 239-240: Shorten the PAGE_DESCRIPTION constant in the
partners.lovable route so it fits within the typical 155–160 character meta
description limit and won’t be truncated in search results. Keep the core SEO
message about Lovable, TanStack Start apps, and cloud deployment, but trim
excess detail from the PAGE_DESCRIPTION string in partners.lovable.tsx.
- Around line 296-303: `trackLovableClick` currently hardcodes
`destination_host` to `lovable.dev`, so docs CTA clicks are misreported; update
the helper in `partners.lovable.tsx` to accept the host as an argument and pass
it through to `trackEvent`, then update every docs-link `onClick` that uses
`LOVABLE_DOCS_HREF` to call `trackLovableClick('docs.lovable.dev')` while
keeping the existing `partner_clicked` payload shape.
---
Nitpick comments:
In `@src/routes/partners.lovable.tsx`:
- Around line 389-405: The repeated primary CTA button styling and tracking
setup should be centralized to avoid duplication across the page. Extract the
shared `Button` configuration from the `partners.lovable.tsx` CTAs into a small
reusable `LovablePrimaryCTA` component (or equivalent wrapper) that encapsulates
the `LOVABLE_HREF`, `target="_blank"`, `rel="noreferrer"`,
`onClick={trackLovableClick}`, and shared className, then replace each repeated
usage with that component while keeping the label/icon flexible.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 81646703-c98d-430a-8f13-a7e4147f8cae
📒 Files selected for processing (2)
src/routeTree.gen.tssrc/routes/partners.lovable.tsx
| const PAGE_DESCRIPTION = | ||
| 'Lovable is the AI app builder that generates production TanStack Start apps from a prompt — file-based routing, SSR, and type safety included — then deploys them to Lovable Cloud with one click. Trusted by 8M+ builders.' |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Meta description is too long and will likely be truncated in search results.
PAGE_DESCRIPTION runs well past the ~155–160 character window Google typically displays before truncating snippets, undercutting the SEO goal of this page.
✏️ Suggested trim
-const PAGE_DESCRIPTION =
- 'Lovable is the AI app builder that generates production TanStack Start apps from a prompt — file-based routing, SSR, and type safety included — then deploys them to Lovable Cloud with one click. Trusted by 8M+ builders.'
+const PAGE_DESCRIPTION =
+ 'Lovable is the AI app builder that generates production TanStack Start apps from a prompt, then deploys them to Lovable Cloud with one click. Trusted by 8M+ builders.'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const PAGE_DESCRIPTION = | |
| 'Lovable is the AI app builder that generates production TanStack Start apps from a prompt — file-based routing, SSR, and type safety included — then deploys them to Lovable Cloud with one click. Trusted by 8M+ builders.' | |
| const PAGE_DESCRIPTION = | |
| 'Lovable is the AI app builder that generates production TanStack Start apps from a prompt, then deploys them to Lovable Cloud with one click. Trusted by 8M+ builders.' |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/routes/partners.lovable.tsx` around lines 239 - 240, Shorten the
PAGE_DESCRIPTION constant in the partners.lovable route so it fits within the
typical 155–160 character meta description limit and won’t be truncated in
search results. Keep the core SEO message about Lovable, TanStack Start apps,
and cloud deployment, but trim excess detail from the PAGE_DESCRIPTION string in
partners.lovable.tsx.
| function trackLovableClick() { | ||
| trackEvent('partner_clicked', { | ||
| partner_id: 'lovable', | ||
| placement: 'detail', | ||
| destination: 'external', | ||
| destination_host: 'lovable.dev', | ||
| }) | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
trackLovableClick always reports destination_host: 'lovable.dev', even for docs links.
This helper is reused for every outbound CTA on the page, including LOVABLE_DOCS_HREF (https://docs.lovable.dev/...) buttons at lines 508-517 and 754-764. Since destination_host is hardcoded to 'lovable.dev', clicks to docs.lovable.dev will be misattributed in analytics.
🐛 Proposed fix
-function trackLovableClick() {
- trackEvent('partner_clicked', {
- partner_id: 'lovable',
- placement: 'detail',
- destination: 'external',
- destination_host: 'lovable.dev',
- })
-}
+function trackLovableClick(destinationHost: string = 'lovable.dev') {
+ trackEvent('partner_clicked', {
+ partner_id: 'lovable',
+ placement: 'detail',
+ destination: 'external',
+ destination_host: destinationHost,
+ })
+}Then update the docs-link buttons: onClick={() => trackLovableClick('docs.lovable.dev')}.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/routes/partners.lovable.tsx` around lines 296 - 303, `trackLovableClick`
currently hardcodes `destination_host` to `lovable.dev`, so docs CTA clicks are
misreported; update the helper in `partners.lovable.tsx` to accept the host as
an argument and pass it through to `trackEvent`, then update every docs-link
`onClick` that uses `LOVABLE_DOCS_HREF` to call
`trackLovableClick('docs.lovable.dev')` while keeping the existing
`partner_clicked` payload shape.
What
Adds a dedicated, SEO- and conversion-focused partner page at
/partners/lovablefor our new Gold-tier sponsor, Lovable. It mirrors the structure of the existing Railway partner page (partners.railway.tsx) using Lovable's own product data.New file:
src/routes/partners.lovable.tsx(a static/partners/lovableroute auto-overrides the dynamic$partnerfallback;routeTree.gen.tsregenerated).Why
Fulfills the Lovable Gold sponsorship. Replaces the sparse auto-generated partner detail page with a rich developer resource optimized for search + AI agents and for driving signups to lovable.dev.
Details
Card,Button,Collapsible,CodeBlock,PartnerImage, Tailwind, dark mode, and analytics (partner_viewed/partner_clicked). No inline styles.seo()meta (title, description, keywords, OG, Twitter card) plus two JSON-LD blocks in SSR HTML:WebPage(partner) +FAQPage(6 Q&As) for rich results / AI search.?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page.Verified
Rendered in light + dark mode (HTTP 200, no console errors); FAQ accordion toggles; copy buttons work; UTM params present on every link; both JSON-LD blocks parse. Pre-commit hook: format + full test suite green (23 pass), 0 lint errors.
Reviewer notes / please confirm
docs.lovable.dev. Swap in a TanStack-specific Lovable guide if one exists.🤖 Generated with Claude Code
Summary by CodeRabbit